package br.com.arg.aplica.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import br.com.arg.aplica.util.Obrigatorio;
import br.com.arg.aplica.util.Utils;

@Entity 
@XmlRootElement
public class CasoDeUso implements Serializable {
	/** Default value included to remove warning. Remove or modify at will. **/
	private static final long serialVersionUID = 1L;

	public CasoDeUso()
	{
		classes = new ArrayList<Classe>();
		telas  = new ArrayList<Tela>();
		mensagens = new ArrayList<Mensagem>();
		this.nome = "Novo cu x";
		this.descricao = "Descriçao para o novo cu x";
		this.casoDeUso = "Caso de uso novo";
		this.dataCriacao = Utils.setData("hoje");
		this.ativo = true;
		this.versao = "021";
	}
	
	@Id
	@GeneratedValue
	private Long id;

	@NotNull
	@Obrigatorio(min = "1", max = "64")	
	private String nome;
	
	@NotNull
	@Obrigatorio(min = "1", max = "255")	
	private String descricao;

	@NotNull
	@Column(length=32000)
	@Obrigatorio(min = "1")	
	private String casoDeUso;

	@NotNull
	@Obrigatorio(min = "hoje")	
	private Date dataCriacao;

	@Column(columnDefinition = "BIT", length = 1)
	@Obrigatorio	
	private boolean ativo;

	@NotNull
	@Size(max = 10)
	@Pattern(regexp = "[0-9.-]*", message = "Somente numero . e -")
	@Obrigatorio(min = "1", max = "10")	
	private String versao;

	//**********************************
	@OneToMany(cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
    private List<Classe> classes;
	
	@OneToMany(cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Tela> telas;
 
	@OneToMany(cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Mensagem> mensagens;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getCasoDeUso() {
		return casoDeUso;
	}

	public void setCasoDeUso(String casoDeUso) {
		this.casoDeUso = casoDeUso;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public List<Classe> getClasses() {
		return classes;
	}

	public void setClasses(List<Classe> classes) {
		this.classes = classes;
	}

	public List<Tela> getTelas() {
		return telas;
	}

	public void setTelas(List<Tela> telas) {
		this.telas = telas;
	}

	public List<Mensagem> getMensagens() {
		return mensagens;
	}

	public void setMensagens(List<Mensagem> mensagens) {
		this.mensagens = mensagens;
	}
}
